package com.artisan.o2o.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.artisan.o2o.entity.Product;

public interface ProductDao {

    /**
     * @param product
     * @Title: insertProduct
     * @Description: 增加商品
     * @return: int
     */
    int insertProduct(Product product);

    /**
     * @param productId
     * @Title: selectProductById
     * @Description: 根据productId查询product
     * @return: Product
     */
    Product selectProductById(long productId);

    /**
     * @param product
     * @Title: updateProduct
     * @Description: 修改商品
     * @return: int
     */
    int updateProduct(Product product);

    /**
     * @param productCondition
     * @param rowIndex         从第几行开始取
     * @param pageSize         返回多少行数据（页面上的数据量）
     *                         <p>
     *                         比如 rowIndex为1,pageSize为5 即为 从第一行开始取，取5行数据
     * @Title: selectProductList
     * @Description: 支持分页功能的查询product
     * <p>
     * 需要支持根据商品名称（支持模糊查询）、商品状态、shopId、商品类别的查询及组合查询
     * @return: List<Product>
     */
    List<Product> selectProductList(@Param("productCondition") Product productCondition, @Param("rowIndex") int rowIndex, @Param("pageSize") int pageSize);

    /**
     * @param productCondition
     * @return
     * @Title: selectCountProduct
     * @Description: 按照条件查询 符合前台传入的条件的商品的总数
     * @return: int
     */
    int selectCountProduct(@Param("productCondition") Product productCondition);

    /**
     * @param productCategoryId
     * @param shopId
     * @Title: updateProductCategory2Null
     * @Description: 删除productCategory的时候，需要先将tb_product中的该productCategoryId置为null
     * @return: int
     */
    int updateProductCategory2Null(@Param("productCategoryId") long productCategoryId, @Param("shopId") long shopId);
}
